ABOUT FUNCTIONS
----------------------------------------------------------
INTRODUCTION
- big picture presentation
  - will cover basic capabilities (1dy required for full description)
  - lots of really DUH examples

- postgres functions supports lots of procedural languages
  - sql, python, perl, bash, ruby, java, tcl, C etc ...
  - plpgsql is the one we will do

- common features of all procedural language functions
  - function definition
  - parameters
    - name
    - arguments
      - argmode; IN, OUT, INOUT, VARIADAC (varying number of arguments)
      - argname
      - argtype
      - default expressions
    - return types
      base
      composite
      domain type
      type of a table column (table_name.column_name%TYPE)
      SET OF (modifier, multiple records/tuples)
      NULL input
  - overloaded
  - polymorphic (anyelement, anyarray, anynonarray, anyenum, anyrange)
----------------------------------------------------------
EXAMPLES (example scripts)

01.hello_world.sql
02.arguments.sql
03.arguments_plpgsql.sql
04.setof_records.sql
05.polymorphic.sql
06.anonymous.sql
----------------------------------------------------------
TIPS
  - securing your database
  - performance tuning
  - triggers
  - dynamically generating function body (caveats!!)
  - abstracting & extending database behaviour
  - administrating functions: psql vs pgadmin
----------------------------------------------------------
REFERENCES
  http://www.postgresql.org/docs/9.2/static/sql-select.html
  http://www.postgresql.org/docs/9.2/static/sql-createfunction.html
  http://www.postgresql.org/docs/9.2/static/server-programming.html
  http://www.postgresql.org/docs/9.2/static/plpgsql.html
  http://www.joeconway.com/presentations/function_basics.pdf
